package User;

import AIGUI.MyAIApp;

import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;
import java.awt.*;
import java.sql.SQLException;
import java.util.Objects;

public class LoginDemo extends JFrame {
    public LoginDemo() {
        super("登录界面");
        // 获取显示屏的大小
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int sw = screenSize.width;
        int sh = screenSize.height;
        // 设置窗口的位置----居中显示
        int width = 500;
        int height = 340;
        this.setBounds((sw - width) / 2, (sh - height) / 2, width, height);

        // 窗口图标和背景图片
        this.setIconImage(Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(getClass().getResource("/pic/chatping.jpg")))); // 图标
        ImageIcon background = new ImageIcon(Objects.requireNonNull(getClass().getResource("/pic/chat.jpg"))); // 背景图片

        JLabel label = new JLabel(background); // 把背景图片显示在一个标签里面
        label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把标签的大小位置设置为图片刚好填充整个面板
        JPanel imagePanel = (JPanel) this.getContentPane(); // 把内容窗格转化为JPanel，否则不能用方法setOpaque()来使内容窗格透明
        imagePanel.setOpaque(false); // 窗口透明
        this.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE)); // 把背景图片添加到分层窗格的最底层作为背景

        // 盒子模块
        Box ubox = Box.createHorizontalBox();
        Box pbox = Box.createHorizontalBox();
        Box vbox = Box.createVerticalBox();

        // 创建界面工具类
        JLabel uLabel = new JLabel("用户名:"); // 文本设计
        JTextField uField = new JTextField(); // 输入框
        uField.setColumns(12);

        JLabel pLabel = new JLabel("密  码:"); // 文本设计
        JPasswordField pFd = new JPasswordField();
        pFd.setColumns(12);
        pFd.setEchoChar('*'); // 星星符号

        JButton button1 = new JButton("登录"); // 登录按钮
        JButton button2 = new JButton("重置"); // 重置按钮
        JMenu Menubutton3 = new JMenu("注册账号"); // 注册按钮

        // 字体设置
        button1.setFont(new Font("微软雅黑", Font.BOLD, 18));
        button1.setBounds((this.getWidth() - 120 - 180) / 2, 250, 120, 30); // 设置按钮位置，及按钮大小
        button1.setCursor(new Cursor(Cursor.HAND_CURSOR)); // 鼠标手势的设置

        button2.setFont(new Font("微软雅黑", Font.BOLD, 18));
        button2.setCursor(new Cursor(Cursor.HAND_CURSOR)); // 鼠标手势的设置
        button2.setBounds((this.getWidth() - 120 + 180) / 2, 250, 120, 30); // 设置按钮位置，及按钮大小

        Menubutton3.setFont(new Font("微软雅黑", Font.BOLD, 12));
        Menubutton3.setForeground(new Color(0x02FCFC)); // 设置前景色
        Menubutton3.setUI(new BasicButtonUI()); // 恢复基本视觉效果
        Menubutton3.setBounds(5, 280, 85, 20); // 设置按钮位置，及按钮大小
        Menubutton3.setContentAreaFilled(false); // 设置按钮透明
        Menubutton3.setCursor(new Cursor(Cursor.HAND_CURSOR));

        // 分区模块布局
        // 小盒子，设计用户名模块
        ubox.add(uLabel);
        ubox.add(Box.createHorizontalStrut(5)); // 插入中间盒子宽度为5，作为相邻文本的空隙
        ubox.add(uField);

        // 小盒子，设计密码模块
        pbox.add(pLabel);
        pbox.add(Box.createHorizontalStrut(10));
        pbox.add(pFd);

        // 大盒子
        vbox.add(Box.createVerticalStrut(80)); // 插入中间盒子高度为20，作为上下文本的空隙
        vbox.add(ubox);
        vbox.add(Box.createVerticalStrut(60));
        vbox.add(pbox);

        // 转换
        JPanel panel = new JPanel();
        panel.setOpaque(false); // 面板透明
        panel.add(vbox, BorderLayout.CENTER); // 将大盒子添加到jLabel盒子里
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        // 点击按钮的监听事件
        button1.addActionListener(e -> {
            try {
                init(this, uField, pFd);

            } catch (Exception exception) {
                JOptionPane.showMessageDialog(null, "异常", "警告", JOptionPane.WARNING_MESSAGE);
            }
        });

        button2.addActionListener(e -> {
            uField.setText("");
            pFd.setText("");
        });

        Menubutton3.addActionListener(e -> {
            try {
                this.dispose();
                Thread.sleep(1000);
                new RegisterDemo(); // 注册界面类
            } catch (InterruptedException interruptedException) {
                JOptionPane.showMessageDialog(null, "异常", "警告", JOptionPane.WARNING_MESSAGE);
            }
        });

        this.add(button1);
        this.add(button2);
        this.add(Menubutton3);
        this.add(panel);
        this.setVisible(true);
        this.setResizable(false);
    }

    public void init(LoginDemo loginDemo, JTextField uField, JPasswordField pFd) {
        Login login;
        UserLogin userLogin;
        try {
            login = new Login();
            login.setLoginDemo(loginDemo);
            login.setUserName(uField.getText());
            char[] p = pFd.getPassword();
            login.setPassword(new String(p));
            userLogin = new UserLogin();
            userLogin.readLogin(login,loginDemo);
        } catch (SQLException | ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "异常", "警告", JOptionPane.WARNING_MESSAGE);
        }
    }
}
